/* jQuery Carousel 0.9.8
Copyright 2010 Thomas Lanciaux and Pierre Bertet.
This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
*/
(function(g){
    g.fn.carousel=function(q){
        var q=g.extend({
            direction:"horizontal",
            loop:false,
            dispItems:1,
            pagination:false,
            paginationPosition:"inside",
            nextBtn:'<input type="button" value="Next" />',
            prevBtn:'<input type="button" value="Previous" />',
            btnsPosition:"inside",
            nextBtnInsert:"insertAfter",
            prevBtnInsert:"insertBefore",
            nextBtnInsertFn:false,
            prevBtnInsertFn:false,
            autoSlide:false,
            autoSlideInterval:3000,
            delayAutoSlide:false,
            combinedClasses:false,
            effect:"slide",
            slideEasing:"swing",
            animSpeed:300,
            equalWidths:"true",
            verticalMargin:0,
            callback:function(){},
            useAddress:false,
            adressIdentifier:"carousel",
            tabLabel:function(r){
                return r
                },
            showEmptyItems:true,
            ajaxMode:false,
            ajaxUrl:"",
            stopSlideBtn:false,
            stopSlideTextPause:"Pause",
            stopSlideTextPlay:"Play"
        },q);
        if(q.btnsPosition=="outside"){
            q.prevBtnInsert="insertBefore";
            q.nextBtnInsert="insertAfter"
            }
            q.delayAutoSlide=0+q.delayAutoSlide;
        return this.each(function(){
            var r={
                $elts:{},
                params:q,
                launchOnLoad:[]
            };
            
            r.$elts.carousel=g(this).addClass("js");
            r.$elts.content=g(this).children().css({
                position:"absolute",
                top:0
            });
            r.$elts.wrap=r.$elts.content.wrap('<div class="carousel-wrap"></div>').parent().css({
                overflow:"hidden",
                position:"relative"
            });
            r.steps={
                first:0,
                count:r.$elts.content.children().length
                };
                
            r.$elts.loader=g('<div class="loader"></div>').css({
                position:"absolute"
            });
            r.steps.last=r.steps.count-1;
            if(r.params.pagination){
                o(r)
                }
                if(g.isFunction(r.params.prevBtnInsertFn)){
                r.$elts.prevBtn=r.params.prevBtnInsertFn(r.$elts)
                }else{
                if(q.btnsPosition=="outside"){
                    r.$elts.prevBtn=g(q.prevBtn)[q.prevBtnInsert](r.$elts.carousel)
                    }else{
                    r.$elts.prevBtn=g(q.prevBtn)[q.prevBtnInsert](r.$elts.wrap)
                    }
                }
            if(g.isFunction(r.params.nextBtnInsertFn)){
            r.$elts.nextBtn=r.params.nextBtnInsertFn(r.$elts)
            }else{
            if(q.btnsPosition=="outside"){
                r.$elts.nextBtn=g(q.nextBtn)[q.nextBtnInsert](r.$elts.carousel)
                }else{
                r.$elts.nextBtn=g(q.nextBtn)[q.nextBtnInsert](r.$elts.wrap)
                }
            }
        r.$elts.nextBtn.addClass("carousel-control next carousel-next");
        r.$elts.prevBtn.addClass("carousel-control previous carousel-previous");
        r.lastItemsToLoad;
        d(r);
        r.$elts.carousel.attr("tabindex",0).add(r.$elts.carousel.children()).bind({
            focus:function(s){
                g(document).bind("keypress",function(t){
                    switch(t.keyCode){
                        case 39:
                            r.$elts.nextBtn.click();
                            break;
                        case 37:
                            r.$elts.prevBtn.click();
                            break
                            }
                            switch(t.charCode){
                        case 110:
                            r.$elts.nextBtn.click();
                            break;
                        case 112:
                            r.$elts.prevBtn.click();
                            break
                            }
                        })
            },
        blur:function(){
            g(document).unbind("keypress")
            }
        });
n(r);
    g(function(){
    c(r);
    g.each(r.launchOnLoad,function(s,t){
        t()
        });
    if(r.params.autoSlide){
        f(r)
        }
        if(q.stopSlideBtn==true){
        r.$elts.stopSlideBtn=g('<button type="button" class="slide-control play">'+q.stopSlideTextPause+"</button>");
        a(r)
        }
    })
})
};

function c(s){
    var t=s.$elts.content.children();
    var r=0;
    t.each(function(){
        $item=g(this);
        $itemHeight=$item.outerHeight();
        if($itemHeight>r){
            r=$itemHeight
            }
        });
if(s.params.verticalMargin>0){
    r=r+s.params.verticalMargin
    }
    t.height(r);
var q=s.$elts.content.children(":first");
s.itemWidth=q.outerWidth();
if(s.params.direction=="vertical"){
    s.contentWidth=s.itemWidth
    }else{
    if(s.params.equalWidths){
        s.contentWidth=s.itemWidth*s.steps.count
        }else{
        s.contentWidth=(function(){
            var u=0;
            s.$elts.content.children().each(function(){
                u+=g(this).outerWidth()
                });
            return u
            })()
        }
    }
s.$elts.content.width(s.contentWidth);
s.itemHeight=r;
if(s.params.direction=="vertical"){
    s.$elts.content.css({
        height:s.itemHeight*s.steps.count+"px"
        });
    s.$elts.content.parent().css({
        height:s.itemHeight*s.params.dispItems+"px"
        })
    }else{
    s.$elts.content.parent().css({
        height:s.itemHeight+"px"
        })
    }
    i(s)
}
function d(q){
    q.$elts.nextBtn.add(q.$elts.prevBtn).bind("enable",function(){
        var r=g(this).unbind("click").bind("click",function(){
            if(q.params.ajaxMode&&r.is(".next")&&b(q)==(p(q)-1)&&!q.lastItemsToLoad){
                h(q);
                q.$elts.content.ajaxSuccess(function(){})
                }else{
                e(q,j(q,(r.is(".next")?"next":"prev")));
                if(q.params.stopSlideBtn==true){
                    q.$elts.stopSlideBtn.trigger("pause")
                    }else{
                    m(q)
                    }
                }
        }).removeClass("disabled").removeAttr("disabled");
    if(q.params.combinedClasses){
        r.removeClass("next-disabled previous-disabled").removeAttr("disabled")
        }
    }).bind("disable",function(){
    var r=g(this).unbind("click").addClass("disabled").attr("disabled","disabled");
    if(q.params.combinedClasses){
        if(r.is(".next")){
            r.addClass("next-disabled")
            }else{
            if(r.is(".previous")){
                r.addClass("previous-disabled")
                }
            }
    }
}).hover(function(){
    g(this).toggleClass("hover")
    })
}
function o(q){
    q.$elts.pagination=g('<div class="center-wrap"><div class="carousel-pagination"><p></p></div></div>')[((q.params.paginationPosition=="outside")?"insertAfter":"appendTo")](q.$elts.carousel).find("p");
    q.$elts.paginationBtns=g([]);
    q.$elts.content.find("li").each(function(r){
        if(r%q.params.dispItems==0){
            k(q,r)
            }
        })
}
function k(r,q){
    if(r.params.pagination){
        r.$elts.paginationBtns=r.$elts.paginationBtns.add(g('<a role="button"><span>'+r.params.tabLabel(r.$elts.paginationBtns.length+1)+"</span></a>").data("firstStep",q)).appendTo(r.$elts.pagination);
        r.$elts.paginationBtns.slice(0,1).addClass("active");
        r.$elts.paginationBtns.click(function(s){
            e(r,g(this).data("firstStep"));
            if(r.params.stopSlideBtn==true){
                r.$elts.stopSlideBtn.trigger("pause")
                }else{
                m(r)
                }
            })
    }
}
function n(q){
    if(q.params.useAddress&&g.isFunction(g.fn.address)){
        g.address.init(function(s){
            var r=g.address.pathNames();
            if(r[0]===q.params.adressIdentifier&&!!r[1]){
                e(q,r[1]-1)
                }else{
                g.address.value("/"+q.params.adressIdentifier+"/1")
                }
            }).change(function(s){
        var r=g.address.pathNames();
        if(r[0]===q.params.adressIdentifier&&!!r[1]){
            e(q,r[1]-1)
            }
        })
}else{
    q.params.useAddress=false
    }
}
function e(q,r){
    q.params.callback(r);
    l(q,r);
    q.steps.first=r;
    i(q);
    if(q.params.useAddress){
        g.address.value("/"+q.params.adressIdentifier+"/"+(r+1))
        }
    }
function j(r,q){
    if(q=="prev"){
        if(!r.params.showEmptyItems){
            if(r.steps.first==0){
                return((r.params.loop)?(r.steps.count-r.params.dispItems):false)
                }else{
                return Math.max(0,r.steps.first-r.params.dispItems)
                }
            }else{
        if((r.steps.first-r.params.dispItems)>=0){
            return r.steps.first-r.params.dispItems
            }else{
            return((r.params.loop)?(r.steps.count-r.params.dispItems):false)
            }
        }
}else{
    if(q=="next"){
        if((r.steps.first+r.params.dispItems)<r.steps.count){
            if(!r.params.showEmptyItems){
                return Math.min(r.steps.first+r.params.dispItems,r.steps.count-r.params.dispItems)
                }else{
                return r.steps.first+r.params.dispItems
                }
            }else{
        return((r.params.loop)?0:false)
        }
    }
}
}
function l(q,r){
    switch(q.params.effect){
        case"no":
            if(q.params.direction=="vertical"){
            q.$elts.content.css("top",-(q.itemHeight*r)+"px")
            }else{
            q.$elts.content.css("left",-(q.itemWidth*r)+"px")
            }
            break;
        case"fade":
            if(q.params.direction=="vertical"){
            q.$elts.content.hide().css("top",-(q.itemHeight*r)+"px").fadeIn(q.params.animSpeed)
            }else{
            q.$elts.content.hide().css("left",-(q.itemWidth*r)+"px").fadeIn(q.params.animSpeed)
            }
            break;
        default:
            if(q.params.direction=="vertical"){
            q.$elts.content.stop().animate({
                top:-(q.itemHeight*r)+"px"
                },q.params.animSpeed,q.params.slideEasing)
            }else{
            q.$elts.content.stop().animate({
                left:-(q.itemWidth*r)+"px"
                },q.params.animSpeed,q.params.slideEasing)
            }
            break
        }
        }
function i(q){
    if(j(q,"prev")!==false){
        q.$elts.prevBtn.trigger("enable")
        }else{
        q.$elts.prevBtn.trigger("disable")
        }
        if(j(q,"next")!==false){
        q.$elts.nextBtn.trigger("enable")
        }else{
        q.$elts.nextBtn.trigger("disable")
        }
        if(q.params.pagination){
        q.$elts.paginationBtns.removeClass("active").filter(function(){
            return(g(this).data("firstStep")==q.steps.first)
            }).addClass("active")
        }
    }
function f(q){
    q.delayAutoSlide=window.setTimeout(function(){
        q.autoSlideInterval=window.setInterval(function(){
            e(q,j(q,"next"))
            },q.params.autoSlideInterval)
        },q.params.delayAutoSlide)
    }
    function m(q){
    window.clearTimeout(q.delayAutoSlide);
    window.clearInterval(q.autoSlideInterval);
    q.params.delayAutoSlide=0
    }
    function a(r){
    var q=r.$elts.stopSlideBtn;
    q.bind({
        play:function(){
            f(r);
            q.removeClass("pause").addClass("play").html(r.params.stopSlideTextPause)
            },
        pause:function(){
            m(r);
            q.removeClass("play").addClass("pause").html(r.params.stopSlideTextPlay)
            }
        });
q.click(function(s){
    if(q.is(".play")){
        q.trigger("pause")
        }else{
        if(q.is(".pause")){
            q.trigger("play")
            }
        }
});
q.prependTo(r.$elts.wrap)
}
function p(q){
    return q.$elts.pagination.children().length
    }
    function b(q){
    return q.steps.first/q.params.dispItems
    }
    function h(q){
    q.$elts.carousel.prepend(q.$elts.loader);
    g.ajax({
        url:q.params.ajaxUrl,
        dataType:"json",
        success:function(r){
            q.lastItemsToLoad=r.bLastItemsToLoad;
            g(q.$elts.content).append(r.shtml);
            q.steps={
                first:q.steps.first+q.params.dispItems,
                count:q.$elts.content.children().length
                };
                
            q.steps.last=q.steps.count-1;
            c(q);
            k(q,q.steps.first);
            e(q,q.steps.first);
            if(q.params.stopSlideBtn==true){
                q.$elts.stopSlideBtn.trigger("pause")
                }else{
                m(q)
                }
                q.$elts.loader.remove()
            }
        })
}
})(jQuery);